/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package AlgoritmoPronostico;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Ahmed
 */
public class Reloj implements Runnable{
    private static Reloj _reloj;    
    //private static int tickLength = 30;
    private Calendar _fecha;
    private int _minutosXSegundo;//minutos SIMULADOS por segundo
    private boolean _detente;
    private boolean _pausado = false;
    public synchronized static Reloj getInstancia(){
        if (_reloj == null)
            _reloj = new Reloj();
        return _reloj;
    }
    @Override
    public void run(){
        while(!_detente){
            if (_pausado) continue;
            for(int i=1; i< _minutosXSegundo;i++){
                this.tick();
                //System.out.println(this._fecha.get(Calendar.HOUR_OF_DAY)+":"+this._fecha.get(Calendar.MINUTE));
                try {
                    Thread.sleep(1000/_minutosXSegundo);
                } catch (InterruptedException ex) {
                    Logger.getLogger(AlgoritmoPronostico.Reloj.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }
    
    public void iniciar(){
        Thread reloj = new Thread(this);
        reloj.start();
    }
    
    public void tick(){
        this._fecha.add(Calendar.MINUTE, 1);

    }
    public void detener(){
        this._detente=true;
    }
    public void pausar(){
        this._pausado = true;
    }
    public void continuar(){
        this._pausado = false;
    }
    
    private Reloj(){
        this._fecha = Calendar.getInstance();
        this._fecha.set(2013,1,1,0,0);
        _minutosXSegundo = 24;
        _detente = false;
        
    }
    public void setReloj(int minuto, int hora, int dia, int mes, int anho){
        this._fecha.set(anho,mes-1,dia,hora,minuto);
    }
    public String getFechaString(String formato){
        SimpleDateFormat sdf= new SimpleDateFormat(formato);
        return sdf.format(this._fecha.getTime() );
    }
    public void setTiempo(int minuto, int hora, int dia, int mes, int anho){
        this._fecha.set(anho,mes-1,dia,hora,minuto);
    }
    
    public int getHora() {
        return _fecha.get(Calendar.HOUR_OF_DAY);
    }

    public void setHora(int hora) {
        this._fecha.set(Calendar.HOUR_OF_DAY, hora);
    }

    public int getMinuto() {
        return _fecha.get(Calendar.MINUTE);
    }

    public void setMinuto(int minuto) {
        this._fecha.set(Calendar.MINUTE, minuto);
    }

    public int getDia() {
        return _fecha.get(Calendar.DAY_OF_MONTH);
    }

    public void setDia(int dia) {
        this._fecha.set(Calendar.DAY_OF_MONTH, dia);
    }

    public int getMes() {
        return _fecha.get(Calendar.MONTH)+1;
    }

    public void setMes(int mes) {
        this._fecha.set(Calendar.MONTH, mes-1);
    }

    public int getAnho() {
        return _fecha.get(Calendar.YEAR);
    }

    public void setAnho(int anho) {
        this._fecha.set(Calendar.YEAR, anho);
    }

    public Calendar getFecha() {
        return _fecha;
    }

    public void setFecha(Calendar fecha) {
        this._fecha = fecha;
    }

    public int getMinutosXSegundo() {
        return _minutosXSegundo;
    }

    public void setMinutosXSegundo(int minutosXSegundo) {
        this._minutosXSegundo = minutosXSegundo;
    }

    int obtenerTurno(int hora) {
        int turno=0;
        if ((hora >= 0) && (hora <=7)){
            turno = 1;
        }
        if ((hora >= 8) && (hora <=15)){
            turno = 2;
        }
        if ((hora >= 16)&& (hora <=23)){
            turno = 3;
        }
        return turno;
    }
}
